package com.cs.beneficios.business.entity;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

import oracle.jdbc.OracleTypes;

import com.cs.beneficios.business.model.BeneficiarioVO;
import com.cs.beneficios.business.model.CondicionConsultaVO;
import com.cs.beneficios.business.model.RepAtributoVO;
import com.cs.beneficios.business.model.RepDetBeneficiarioVO;
import com.cs.beneficios.common.ConnectionFactory;

public class RepDetBeneficiarioDAO {
	/**
	 * Conexion a la base de datos.
	 */
	private Connection conn = null;
	// private Connection connEsp = null;
	private ConnectionFactory cf;
	// private int contEsp = 0;
	// private int swEsp = 0;
	// private int contGen = 0;
	// private int swGen = 0;

	private boolean checkFiltersEsp = false;
	private boolean checkFiltersGen = false;

	/**
	 * Constructor que inicializa la conexion con la base de datos.
	 * 
	 * @param conn
	 *            Conexion con la base de datos.
	 */
	public RepDetBeneficiarioDAO(ConnectionFactory cf) {
		this.cf = cf;
		try {
			this.conn = this.cf.getConnection();
		} catch (SQLException e) {
		}
	}

	public int getCantidadBeneficiarios(RepDetBeneficiarioVO criterea)
			throws SQLException {
		String query = "SELECT COUNT(1) FROM(SELECT TO_CHAR(beneotor.FECHA_BENEFICIO,'DD/MM/RRRR') fechabeneficio, beneotor.CODIGO codbeneotor, beneotor.BEN_CODIGO codbeneficiario, sede.CODIGO codsede, "
				+ "sede.NOMBRE nomsede, prog.CODIGO codpro, prog.NOMBRE nompro, "
				+ "subpro.CODIGO codsubpro, subpro.NOMBRE nomsubpro "
				+ "FROM TCS_BEN_PROGRAMA prog, TCS_BEN_SUBPROGRAMA subpro, "
				+ "TCS_BEN_BENEFICIO_OTORGADO beneotor, TCS_BEN_SEDE sede, "
				+ "TCS_BEN_BENEFICIARIO beneficiario "
				+ "WHERE beneotor.SBPR_CODIGO =  subpro.CODIGO "
				+ "AND beneotor.SEDE_CODIGO = sede.CODIGO "
				+ "AND subpro.PRG_CODIGO = prog.CODIGO "
				+ "AND beneficiario.CODIGO = beneotor.BEN_CODIGO "
				+ "AND beneotor.FECHA_BENEFICIO <= sysdate and prog.vigencia='A' and subpro.vigencia='A' ";

		int cantidad = 0;

		if ((Object) criterea.getCodeSede() != null) {
			query += " and sede.CODIGO = " + criterea.getCodeSede();
		}
		if ((Object) criterea.getCodeSubprograma() != null) {
			query += " and subpro.CODIGO = " + criterea.getCodeSubprograma();
		}
		if ((Object) criterea.getCodePrograma() != null) {
			query += " and prog.CODIGO = " + criterea.getCodePrograma();
		}
		if ((Object) criterea.getDesde() != null
				&& (Object) criterea.getHasta() != null) {
			query += "and beneotor.FECHA_BENEFICIO between to_date('"
					+ criterea.getDesde() + "','dd/mm/rrrr') and to_date('"
					+ criterea.getHasta() + "','dd/mm/rrrr')";
		}

		query += " ORDER BY prog.NOMBRE,subpro.NOMBRE,sede.NOMBRE) ";

		ResultSet rst = null;
		rst = cf.getRecordsRset(query, null, conn);
		rst.next();

		cantidad = rst.getInt(1);

		rst.close();
		return cantidad;
	}

	public Integer getCantidadBeneficiarios(List filtros, ConnectionFactory cf,
			RepDetBeneficiarioVO criterea) throws SQLException {
		String filtrosGenerales = "'" + checkFiltros((Collection) filtros)
				+ "'";
		String Desde = criterea.getDesde();
		String Hasta = criterea.getHasta();

		if (Desde != null) {
			Desde = "'" + Desde + "'";
		}
		if (Hasta != null) {
			Hasta = "'" + Hasta + "'";
		}

		conn = cf.getConnection();

		String strSql = "{call beneficios.PCS_CANTIDAD_BENEFICIARIOS(" + ""
				+ filtrosGenerales + ", '' , " + criterea.getCodeSede() + ", "
				+ criterea.getCodeSubprograma() + ", "
				+ criterea.getCodePrograma() + "," + Desde + ", " + Hasta
				+ ", ?)}";

		CallableStatement stmt = conn.prepareCall(strSql);
		stmt.registerOutParameter(1, OracleTypes.CURSOR);
		stmt.execute();

		ResultSet rst = (ResultSet) stmt.getObject(1);

		rst.next();

		return (new Integer(rst.getInt(1)));

	}

	/*
	 * public Collection getBeneficiarios(RepDetBeneficiarioVO criterea) throws
	 * SQLException { String query =
	 * "SELECT TO_CHAR(beneotor.FECHA_BENEFICIO,'DD/MM/RRRR') fechabeneficio, beneotor.CODIGO codbeneotor, beneotor.BEN_CODIGO codbeneficiario, sede.CODIGO codsede, "
	 * + "sede.NOMBRE nomsede, prog.CODIGO codpro, prog.NOMBRE nompro, "+
	 * "subpro.CODIGO codsubpro, subpro.NOMBRE nomsubpro "+
	 * "FROM TCS_BEN_PROGRAMA prog, TCS_BEN_SUBPROGRAMA subpro, "+
	 * "TCS_BEN_BENEFICIO_OTORGADO beneotor, TCS_BEN_SEDE sede, "+
	 * "TCS_BEN_BENEFICIARIO beneficiario "+
	 * "WHERE beneotor.SBPR_CODIGO =  subpro.CODIGO "+
	 * "AND beneotor.SEDE_CODIGO = sede.CODIGO "+
	 * "AND subpro.PRG_CODIGO = prog.CODIGO "+
	 * "AND beneficiario.CODIGO = beneotor.BEN_CODIGO "+
	 * "AND beneotor.FECHA_BENEFICIO <= sysdate and prog.vigencia='A' and subpro.vigencia='A' "
	 * ;
	 * 
	 * 
	 * if((Object)criterea.getCodeSede() != null) { query +=
	 * " and sede.CODIGO = "+criterea.getCodeSede(); }
	 * if((Object)criterea.getCodeSubprograma() != null) { query +=
	 * " and subpro.CODIGO = "+criterea.getCodeSubprograma(); }
	 * if((Object)criterea.getCodePrograma() != null) { query +=
	 * " and prog.CODIGO = "+criterea.getCodePrograma(); }
	 * if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() !=
	 * null) { query +=
	 * "and beneotor.FECHA_BENEFICIO between to_date('"+criterea
	 * .getDesde()+"','dd/mm/rrrr') and to_date('"
	 * +criterea.getHasta()+"','dd/mm/rrrr')"; }
	 * 
	 * // if((Object)criterea.getDesde() != null && (Object)criterea.getHasta()
	 * == null) // { // query +=
	 * "and beneotor.FECHA_BENEFICIO >= '"+criterea.getDesde()+"'"; // } //
	 * if((Object)criterea.getDesde() == null && (Object)criterea.getHasta() !=
	 * null) // { // query +=
	 * "and beneotor.FECHA_BENEFICIO <= '"+criterea.getHasta()+"'"; // }
	 * 
	 * query += " ORDER BY prog.NOMBRE,subpro.NOMBRE,sede.NOMBRE "; ResultSet
	 * rst = null; ArrayList lbeneotor = new ArrayList(); rst =
	 * cf.getRecordsRset(query,null,conn); RepDetBeneficiarioVO objbeneficiario
	 * = null; while ( rst.next() ) { objbeneficiario = new
	 * RepDetBeneficiarioVO();
	 * 
	 * objbeneficiario.setCodeSede(new Long (rst.getLong("codsede")));
	 * objbeneficiario.setNombreSede(rst.getString("nomsede"));
	 * objbeneficiario.setCodePrograma(new Long(rst.getLong("codpro")));
	 * objbeneficiario.setNombrePrograma(rst.getString("nompro"));
	 * objbeneficiario.setCodeSubprograma(new Long (rst.getLong("codsubpro")));
	 * objbeneficiario.setNombreSubprograma(rst.getString("nomsubpro"));
	 * objbeneficiario.setDesde(criterea.getDesde());
	 * objbeneficiario.setHasta(criterea.getHasta());
	 * objbeneficiario.setCodebeneficiario(new
	 * Long(rst.getString("codbeneficiario")));
	 * objbeneficiario.setCodebenotorgado(new
	 * Long(rst.getString("codbeneotor")));
	 * objbeneficiario.setFechabeneotorgado(rst.getString("fechabeneficio"));
	 * 
	 * 
	 * lbeneotor.add(objbeneficiario);
	 * 
	 * objbeneficiario=null; } rst.close(); return lbeneotor; }
	 */

	public Collection getReporte(Collection atributosGenericos,
			Collection filtros, ConnectionFactory cf,
			RepDetBeneficiarioVO criterea) throws SQLException {
		Collection beneficiarios = new LinkedList();
		List latributosGenericos = (List) atributosGenericos;

		RepAtributoVO atrVO = null;

		cf.closeConnection(conn);

		String atriGenerales = null;
		String filtrosGenerales = "'" + checkFiltros(filtros) + "'";
		String Desde = null;
		String Hasta = null;

		if (criterea.getDesde() != null) {
			Desde = "'" + criterea.getDesde() + "'";
		}
		if (criterea.getHasta() != null) {
			Hasta = "'" + criterea.getHasta() + "'";
		}

		if (latributosGenericos.size() > 0) {
			atriGenerales = "";

			for (int i = 0; i < latributosGenericos.size(); i++) {
				atrVO = (RepAtributoVO) latributosGenericos.get(i);

				atriGenerales += atrVO.getNombre() + "|";
			}

			atriGenerales = "'" + atriGenerales + "'";
		}

		conn = cf.getConnection();

		String strSql = "{call beneficios.PCS_REPORTE_BENEFICIARIOS("
				+ atriGenerales + ", " + filtrosGenerales + ", "
				+ criterea.getCodeSede() + ", " + criterea.getCodeSubprograma()
				+ ", " + criterea.getCodePrograma() + ", " + Desde + ", "
				+ Hasta + ", ? )}";
		System.out.println(strSql);
		CallableStatement stmt = conn.prepareCall(strSql);
		stmt.registerOutParameter(1, OracleTypes.CURSOR);
		stmt.execute();

		ResultSet rst = (ResultSet) stmt.getObject(1);
		BeneficiarioVO beneficiarioVO = null;

		while (rst.next()) {
			beneficiarioVO = new BeneficiarioVO();
			if (atriGenerales != null) {
				if (atriGenerales.indexOf("TIPO_DOCUMENTO") != -1) {
					beneficiarioVO.setTipoDocumento(rst
							.getString("TIPO_DOCUMENTO"));
				}
				if (atriGenerales.indexOf("NUMERO_DOCUMENTO") != -1) {
					beneficiarioVO.setNumeroDocumento(rst
							.getString("NUMERO_DOCUMENTO"));
				}
				if (atriGenerales.indexOf("PRIMER_NOMBRE") != -1) {
					beneficiarioVO.setNombre1(rst.getString("PRIMER_NOMBRE"));
				}
				if (atriGenerales.indexOf("SEGUNDO_NOMBRE") != -1) {
					beneficiarioVO.setNombre2(rst.getString("SEGUNDO_NOMBRE"));
				}
				if (atriGenerales.indexOf("PRIMER_APELLIDO") != -1) {
					beneficiarioVO.setPrimerApellido(rst
							.getString("PRIMER_APELLIDO"));
				}
				if (atriGenerales.indexOf("SEGUNDO_APELLIDO") != -1) {
					beneficiarioVO.setSegundoApellido(rst
							.getString("SEGUNDO_APELLIDO"));
				}
				if (atriGenerales.indexOf("DIRECCION_DESCRIPTIVA") != -1) {
					beneficiarioVO.setDirDescriptiva(rst
							.getString("DIRECCION_DESCRIPTIVA"));
				}
				if (atriGenerales.indexOf("DIRECCION_ENCASILLADA") != -1) {
					beneficiarioVO.setDirEncasillada(rst
							.getString("DIRECCION_ENCASILLADA"));
				}
				if (atriGenerales.indexOf("SEXO") != -1) {
					beneficiarioVO.setSexo(rst.getString("SEXO"));
				}
				if (atriGenerales.indexOf("FECHA_NACIMIENTO") != -1) {
					beneficiarioVO.setFechaNacimiento(rst
							.getString("FECHA_NACIMIENTO"));
				}
				if (atriGenerales.indexOf("VFL_CODIGO_COMUNA") != -1) {
					beneficiarioVO.setVflComuna(rst
							.getString("VFL_CODIGO_COMUNA"));
				}
				if (atriGenerales.indexOf("VFL_CODIGO_ZONA") != -1) {
					beneficiarioVO
							.setDescZona(rst.getString("VFL_CODIGO_ZONA"));
				}
				if (atriGenerales.indexOf("LOCALIZACION_COBAMA") != -1) {
					beneficiarioVO.setCobama(rst
							.getString("LOCALIZACION_COBAMA"));
				}
				if (atriGenerales.indexOf("VFL_CODIGO_BARRIO") != -1) {
					beneficiarioVO.setDescBarrio(rst
							.getString("VFL_CODIGO_BARRIO"));
				}
				if (atriGenerales.indexOf("TELEFONO") != -1) {
					beneficiarioVO.setTelefono(rst.getString("TELEFONO"));
				}
				if (atriGenerales.indexOf("ETNIA") != -1) {
					beneficiarioVO.setEtnia(rst.getString("ETNIA"));
				}
				if (atriGenerales.indexOf("CORREO_ELECTRONICO") != -1) {
					beneficiarioVO.setMail(rst.getString("CORREO_ELECTRONICO"));
				}
				if (atriGenerales.indexOf("FICHA_SISBEN") != -1) {
					beneficiarioVO
							.setFichaSisben(rst.getString("FICHA_SISBEN"));
				}
				if (atriGenerales.indexOf("HOGAR_SISBEN") != -1) {
					beneficiarioVO.setHogar(rst.getString("HOGAR_SISBEN"));
				}
				if (atriGenerales.indexOf("ORDEN_SISBEN") != -1) {
					beneficiarioVO
							.setOrdenSisben(rst.getString("ORDEN_SISBEN"));
				}
				if (atriGenerales.indexOf("NIVEL_SISBEN") != -1) {
					beneficiarioVO
							.setNivelSisben(rst.getString("NIVEL_SISBEN"));
				}
				if (atriGenerales.indexOf("PUNTAJE_SISBEN") != -1) {
					beneficiarioVO.setPuntajeSisben(rst
							.getString("PUNTAJE_SISBEN"));
				}
				if (atriGenerales.indexOf("FE_ENCUESTA_SISBEN") != -1) {
					beneficiarioVO.setFechaEncuesta(rst
							.getString("FE_ENCUESTA_SISBEN"));
				}
				if (atriGenerales.indexOf("DISCAPACIDAD_SISBEN") != -1) {
					beneficiarioVO.setDiscapacidad(rst
							.getString("DISCAPACIDAD_SISBEN"));
				}
				if (atriGenerales.indexOf("EDAD") != -1) {
					beneficiarioVO.setEdad(rst.getString("EDAD"));
				}
				if (criterea.getCodePrograma() == null
						&& criterea.getCodeSubprograma() == null
						&& criterea.getCodeSede() != null) {
					beneficiarioVO
							.setPrograma(rst.getString("NOMBRE_PROGRAMA"));
					beneficiarioVO.setBeneficio(rst
							.getString("NOMBRE_SUBPROGRAMA"));

				} else if (criterea.getCodePrograma() != null
						&& criterea.getCodeSubprograma() == null) {
					beneficiarioVO.setBeneficio(rst
							.getString("NOMBRE_SUBPROGRAMA"));
				}
			}

			beneficiarios.add(beneficiarioVO);
		}

		cf.closeConnection(conn);
		conn = null;

		return beneficiarios;
	}

	/*
	 * private Collection getAtributosGenerales(Collection atributosGenericos,
	 * Long codeBOT, Long codeBen, Collection filtros) throws SQLException {
	 * Collection repAtributos = new LinkedList(); List atr =
	 * (List)atributosGenericos; boolean vflex = false; boolean barrio = false;
	 * boolean zona = false; boolean comuna = false; String query = "select ";
	 * RepAtributoVO atrVO = null; for(int i = 0; i< atr.size(); i++) { atrVO =
	 * (RepAtributoVO)atr.get(i); String nombre = atrVO.getNombre();
	 * if(nombre.equals("TIPO_DOCUMENTO")) { query +=
	 * " decode(ben."+nombre+",'C','Cedula de ciudadania', "+
	 * " 'E','Cedula de extranjeria', 'N','Nit', 'P','Pasaporte', "+
	 * " 'R','Registro civil','T','Tarjeta de identidad','O','Otro', "+
	 * " 'I','NIP','U','NUIP','S','NISE','A','Cabildo',ben."
	 * +nombre+") TIPO_DOCUMENTO,"; }else if(nombre.equals("ETNIA")) { query +=
	 * " nvl(decode(ben."+nombre+",'A','Afrocolombiano', "+
	 * " 'I','Indigena','O','Otro', "+ "ben."+nombre+"),' ') ETNIA,"; }else
	 * if(nombre.equals("SEXO")) { query +=
	 * " nvl(decode(ben."+nombre+",'F','Femenino', "+
	 * " 'M','Masculino' ,ben."+nombre+"),' ') SEXO,"; }else
	 * if(nombre.equals("VFL_CODIGO_BARRIO")) { query +=
	 * " vflexBarrio.descripcion VFL_CODIGO_BARRIO, "; barrio = true; vflex =
	 * true; }else if(nombre.equals("VFL_CODIGO_ZONA")) { query +=
	 * " vflexZona.descripcion VFL_CODIGO_ZONA, "; zona = true; vflex = true;
	 * }else if(nombre.equals("VFL_CODIGO_COMUNA")) { query +=
	 * " vflexComuna.descripcion VFL_CODIGO_COMUNA, "; comuna = true; vflex =
	 * true; }else if(nombre.equals("FECHA_NACIMIENTO")) { query +=
	 * " nvl(to_char(ben.FECHA_NACIMIENTO,'DD/MM/RRRR'),' ') FECHA_NACIMIENTO, "
	 * ; }else if(nombre.equals("FE_ENCUESTA_SISBEN")) { query +=
	 * " nvl(to_char(ben.FE_ENCUESTA_SISBEN,'DD/MM/RRRR'),' ') FE_ENCUESTA_SISBEN, "
	 * ; }else{ query += "nvl(ben."+nombre+",' ') "+nombre+" ,"; } } if(!vflex)
	 * { query += "to_char(rownum) numero "+ "from tcs_ben_beneficiario ben, "+
	 * "       tcs_ben_beneficio_otorgado bot "+
	 * " where bot.BEN_CODIGO = ben.CODIGO "+ " and bot.CODIGO = "+codeBOT+
	 * " and ben.codigo = "+codeBen+ checkFiltros(filtros); }else { query +=
	 * "to_char(rownum) numero "+ "from tcs_ben_beneficiario ben, ";
	 * 
	 * if(barrio) { query += " paoyer.tcs_valor_flexible vflexBarrio, "; }
	 * if(zona) { query += " paoyer.tcs_valor_flexible vflexZona, "; }
	 * if(comuna) { query += " paoyer.tcs_valor_flexible vflexComuna, "; } query
	 * += " tcs_ben_beneficio_otorgado bot "+
	 * " where bot.BEN_CODIGO = ben.CODIGO "+
	 * " AND bot.FECHA_BENEFICIO <= sysdate "+ " and bot.CODIGO = "+codeBOT+
	 * " and ben.codigo = "+codeBen+ checkFiltros(filtros); if(barrio) { query
	 * += " and vflexBarrio.CODIGO (+)= VFL_CODIGO_BARRIO"; } if(zona) { query
	 * += " and vflexZona.CODIGO (+)= VFL_CODIGO_ZONA"; } if(comuna) { query +=
	 * " and vflexComuna.CODIGO (+)= VFL_CODIGO_COMUNA"; }
	 * 
	 * }
	 * 
	 * ResultSet rst = cf.getRecordsRset(query,null,conn);
	 * 
	 * RepAtributoVO atributo = null;
	 * 
	 * while(rst.next()) { for(int i = 0; i< atr.size(); i++) { checkFiltersGen
	 * = true; atrVO = (RepAtributoVO)atr.get(i); atributo = new
	 * RepAtributoVO(); atributo.setNumeroAtributo(i+1);
	 * atributo.setNombre(atrVO.getEtiqueta());
	 * atributo.setValor(rst.getString(i+1)); repAtributos.add(atributo); } }
	 * if(atr.size() == 0) checkFiltersGen = true;
	 * 
	 * return repAtributos; }
	 */

	/*
	 * public Collection getAtributosEspecificos(Collection
	 * atributosEspecificos, Long codeSubprograma, Long codeSede, Long codeBOT,
	 * Long codeBen, Collection filtros) throws SQLException {
	 * 
	 * Collection repAtributos = new LinkedList(); List atr =
	 * (List)atributosEspecificos; RepAtributoVO atrVO = null; String query =
	 * "SELECT rownum numeroAtributo, atr.NOMBRE nombreAtributo, "+
	 * "nvl(fcs_ben_valor_atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') valor "
	 * + "from tcs_ben_beneficiario ben, "+ "tcs_ben_subprograma sub, "+
	 * "tcs_ben_beneficio_otorgado bot, "+
	 * "tcs_ben_subp_atr_beneficiario atr, "+ "tcs_ben_sede sede "+
	 * "WHERE  ben.codigo = bot.ben_codigo "+
	 * "AND sub.codigo = bot.sbpr_codigo "+ "AND sub.codigo = atr.sbpr_codigo "+
	 * "AND sede.codigo = bot.sede_codigo "+
	 * " AND bot.FECHA_BENEFICIO <= sysdate "+
	 * "AND sub.codigo = "+codeSubprograma+ " AND sede.codigo = "+codeSede+
	 * " AND bot.codigo = "+codeBOT+ " AND ben.codigo = "+codeBen; if(atr.size()
	 * > 0) query +=" AND atr.codigo in (";
	 * 
	 * for(int i = 0; i< atr.size(); i++) { atrVO = (RepAtributoVO)atr.get(i);
	 * query += atrVO.getCodigo().toString()+","; } if(atr.size() > 0) query
	 * +="0) "; if((Object)filtros != null) { List lFiltros = (List)filtros;
	 * CondicionConsultaVO filtro= null; int cont_filtro = 0; for(int
	 * i=0;i<lFiltros.size();i++) { filtro =
	 * (CondicionConsultaVO)lFiltros.get(i); if(filtro.getOrigen().equals("E"))
	 * { cont_filtro++; } } //if(cont_filtro>0) //query +=
	 * " and bot.codigo in ("
	 * +checkFiltros(filtros,codeSede,codeSubprograma,codeBen)+")"; } query
	 * +=" order by ben.codigo, numeroAtributo ";
	 * 
	 * //System.out.println(query); ResultSet rst =
	 * cf.getRecordsRset(query,null,conn); RepAtributoVO atributo = null;
	 * while(rst.next()) { checkFiltersEsp = true; atributo = new
	 * RepAtributoVO();
	 * atributo.setNumeroAtributo(rst.getInt("numeroAtributo"));
	 * atributo.setNombre(rst.getString("nombreAtributo"));
	 * atributo.setValor(rst.getString("valor")); repAtributos.add(atributo); }
	 * 
	 * if(atr.size() == 0) repAtributos = null; rst.close(); return
	 * repAtributos; }
	 */

	public String checkFiltros(Collection filtros) {
		List lFiltros = (List) filtros;
		CondicionConsultaVO filtro = null;
		String retorno = "";
		if ((Object) filtros != null) {
			for (int i = 0; i < lFiltros.size(); i++) {
				filtro = (CondicionConsultaVO) lFiltros.get(i);
				String operador = filtro.getCodfiltro();
				String tipoDato = filtro.getTipocampo();

				if (filtro.getOrigen().equals("G")) {
					retorno += " and ";
					if (tipoDato.equals("N")) {
						if (operador.equals("=")) {
							retorno += " ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals("<>")) {
							retorno += " ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals("<=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals(">=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals("<")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals(">")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor()
									+ " and " + filtro.getValor2();
						}

					} else if (tipoDato.equals("F")) {

						if (operador.equals("between") || operador.equals("=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " to_date(''"
									+ filtro.getValor()
									+ "'', ''DD/MM/RRRR'') and to_date(''"
									+ filtro.getValor2()
									+ "'', ''DD/MM/RRRR'')";

						} else {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " to_date(''"
									+ filtro.getValor() + "'', ''DD/MM/RRRR'')";
						}

					} else if (tipoDato.equals("A") || tipoDato.equals("L")) {
						if (operador.equals("=")) {
							retorno += " UPPER(ben." + filtro.getCodcampo()
									+ " ) " + operador + " ''"
									+ filtro.getValor().toUpperCase() + "''";
						} else if (operador.equals("<>")) {
							retorno += " UPPER(ben." + filtro.getCodcampo()
									+ " ) " + operador + " ''"
									+ filtro.getValor().toUpperCase() + "''";
						} else if (operador.equals("like")) {
							retorno += " UPPER(ben." + filtro.getCodcampo()
									+ " ) " + operador + " ''%"
									+ filtro.getValor().toUpperCase() + "%''";

						}
					} else {
						if (operador.equals("=")) {
							retorno += " ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals("<>")) {
							retorno += " ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals("<=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals(">=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals("<")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals(">")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "'' and ''" + filtro.getValor2() + "''";
						}
					}
				}
			}
		}
		// System.out.println("retorno: " + retorno);
		return retorno;
	}

	/*
	 * public String checkFiltrosEspecificos(Collection filtros) throws
	 * SQLException { List lFiltros = (List)filtros; CondicionConsultaVO filtro=
	 * null; String retorno = ""; if((Object)filtros != null){ for(int
	 * i=0;i<lFiltros.size();i++) { filtro =
	 * (CondicionConsultaVO)lFiltros.get(i); if(filtro.getOrigen().equals("E"))
	 * { if(filtro.getCodfiltro().equals("=")) { retorno +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+
	 * ", bot.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"
	 * +filtro.getValor()+"'') "; }else if(filtro.getCodfiltro().equals("<>")) {
	 * retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+
	 * ", bot.codigo, bot.FECHA_BENEFICIO),'' '') <> TO_CHAR(''"
	 * +filtro.getValor()+"'') "; }else if(filtro.getCodfiltro().equals("<=")) {
	 * retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+
	 * ", bot.codigo, bot.FECHA_BENEFICIO),'' '') <= TO_CHAR(''"
	 * +filtro.getValor()+"'') "; }else if(filtro.getCodfiltro().equals(">=")) {
	 * retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+
	 * ", bot.codigo, bot.FECHA_BENEFICIO),'' '') >= TO_CHAR(''"
	 * +filtro.getValor()+"'') "; }else if(filtro.getCodfiltro().equals("<")) {
	 * retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+
	 * ", bot.codigo, bot.FECHA_BENEFICIO),'' '') < TO_CHAR(''"
	 * +filtro.getValor()+"'') "; }else if(filtro.getCodfiltro().equals(">")) {
	 * retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+
	 * ", bot.codigo, bot.FECHA_BENEFICIO),'' '') > TO_CHAR(''"
	 * +filtro.getValor()+"'') "; }else
	 * if(filtro.getCodfiltro().equals("between")) { retorno +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+
	 * ", bot.codigo, bot.FECHA_BENEFICIO),'' '') between TO_CHAR(''"
	 * +filtro.getValor()+"'') AND TO_CHAR(''"+filtro.getValor2()+"'')"; } } } }
	 * return retorno; }
	 */

	public RepDetBeneficiarioVO getFilters(RepDetBeneficiarioVO objRepDetBen)
			throws SQLException {
		String strQuery = null;
		ResultSet rst = null;

		if (objRepDetBen.getCodeSede() != null) {
			strQuery = "SELECT NOMBRE" + " FROM TCS_BEN_SEDE"
					+ " WHERE CODIGO = " + objRepDetBen.getCodeSede();
			rst = cf.getRecordsRset(strQuery, null, conn);
			rst.next();

			objRepDetBen.setNombreSede(rst.getString("NOMBRE"));
		}
		if (objRepDetBen.getCodePrograma() != null) {
			strQuery = "SELECT NOMBRE" + " FROM TCS_BEN_PROGRAMA"
					+ " WHERE CODIGO = " + objRepDetBen.getCodePrograma();
			rst = cf.getRecordsRset(strQuery, null, conn);
			rst.next();

			objRepDetBen.setNombrePrograma(rst.getString("NOMBRE"));
		}
		if (objRepDetBen.getCodeSubprograma() != null) {
			strQuery = "SELECT NOMBRE" + " FROM TCS_BEN_SUBPROGRAMA"
					+ " WHERE CODIGO = " + objRepDetBen.getCodeSubprograma();
			rst = cf.getRecordsRset(strQuery, null, conn);
			rst.next();

			objRepDetBen.setNombreSubprograma(rst.getString("NOMBRE"));
		}

		if (rst != null)
			rst.close();

		return objRepDetBen;
	}

	/*
	 * public String checkFiltros(Collection filtros, Long codeSede, Long
	 * codeSubpro, Long codeBen) throws SQLException { List lFiltros =
	 * (List)filtros; CondicionConsultaVO filtro= null; String retorno="";
	 * Vector vRetorno = new Vector(); int Estado = 0; boolean noCumple = false;
	 * for(int i=0;i<lFiltros.size();i++) { filtro =
	 * (CondicionConsultaVO)lFiltros.get(i); if(filtro.getOrigen().equals("E"))
	 * { String strSQL = "SELECT bot.codigo codigo "+
	 * "FROM TCS_BEN_BENEFICIARIO ben, TCS_BEN_SUBPROGRAMA sub, "+
	 * "TCS_BEN_BENEFICIO_OTORGADO bot, TCS_BEN_SUBP_ATR_BENEFICIARIO atr, TCS_BEN_SEDE sede "
	 * + "WHERE  ben.codigo = bot.ben_codigo "+
	 * "AND sub.codigo = bot.sbpr_codigo "+
	 * "AND bot.FECHA_BENEFICIO <= sysdate "+
	 * "AND sub.codigo = atr.sbpr_codigo "+
	 * "AND sede.codigo = bot.sede_codigo "+ "AND sub.codigo = "+codeSubpro+
	 * " AND ben.codigo = "+codeBen+ " AND sede.codigo = "+codeSede;
	 * 
	 * if(filtro.getCodfiltro().equals("=")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') = TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals("<>")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') <> TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals("<=")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') <= TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals(">=")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') >= TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals("<")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') < TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals(">")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') > TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals("between")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') between TO_CHAR('"
	 * +filtro.getValor()+"') AND TO_CHAR('"+filtro.getValor2()+"')"+
	 * " AND atr.codigo = "+filtro.getCodcampo(); }
	 * 
	 * ResultSet rst = cf.getRecordsRset(strSQL,null,conn); if(rst.next()) {
	 * if(!noCumple) { vRetorno.add(rst.getString("codigo")); } }else {
	 * vRetorno.removeAllElements(); noCumple = true; } } } if(vRetorno.size() >
	 * 0) { for(int k=0;k<vRetorno.size();k++) { retorno+=vRetorno.get(k)+",";
	 * 
	 * } retorno+= "0"; }else { retorno+= "0"; }
	 * 
	 * return retorno; }
	 */

	public Connection getConn() {
		return conn;
	}
}